package com.example.chapter08;

import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.example.chapter08.util.ToastUtil;

/**
 * 演示Spinner（下拉列表）的基础用法：展示行星列表，选中项变化时提示选中内容
 * 实现了AdapterView.OnItemSelectedListener接口，用于监听Spinner的选中事件
 */
public class SpinnerDropdownActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener {

    // 下拉列表的数据源：存储行星名称的字符串数组
    private final static String[] starArray = {"水星", "金星", "地球", "火星", "木星", "土星"};
    // Spinner控件实例：用于展示下拉列表
    private Spinner sp_dropdown;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 设置当前Activity的布局文件（包含Spinner控件的界面）
        setContentView(R.layout.activity_spinner_dropdown);

        // 从布局中获取Spinner控件实例
        sp_dropdown = findViewById(R.id.sp_dropdown);

        // 创建数组适配器（Adapter）：用于将数据与Spinner控件绑定
        // 参数说明：
        // 1. 上下文（当前Activity）
        // 2. 下拉项的布局文件（R.layout.item_select，定义每个选项的显示样式）
        // 3. 数据源（starArray，要展示的行星列表）
        ArrayAdapter<String> starAdapter = new ArrayAdapter<>(this, R.layout.item_select, starArray);

        // 给Spinner设置适配器，完成数据与视图的绑定
        sp_dropdown.setAdapter(starAdapter);

        // 设置Spinner默认选中的项（索引为0，即"水星"）
        sp_dropdown.setSelection(0);

        // 给Spinner设置选中事件监听器（当前Activity实现了该接口，所以传this）
        sp_dropdown.setOnItemSelectedListener(this);
    }

    /**
     * Spinner选中项发生变化时触发的回调方法
     * @param parent 触发事件的Spinner控件（AdapterView类型，可强转为Spinner）
     * @param view 被选中的下拉项视图（如TextView）
     * @param position 选中项在数据源中的索引（从0开始）
     * @param id 选中项的行ID（通常与position一致，除非自定义适配器修改了ID）
     */
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        // 通过索引从数据源中获取选中的行星名称，并用Toast提示
        ToastUtil.show(this, "您选择的是" + starArray[position]);
    }

    /**
     * 当Spinner没有选中任何项时触发的回调方法（通常在初始化时若未设置默认选中项会触发）
     * 本示例中已通过setSelection(0)设置默认选中项，所以此方法一般不会被调用
     * @param parent 触发事件的Spinner控件
     */
    @Override
    public void onNothingSelected(AdapterView<?> parent) {
        // 此处为空实现，可根据需求添加逻辑（如提示"请选择一项"）
    }
}